將陣列內的每個元素,皆傳入並執行一次
類似 forEach(),但 map() 會產生一個新陣列
const list = [1,2,3,4]
const result = list.map(function(val) {
return val*2
})
console.log(result)
const list = [1,2,3,4]
const double = (i) => i*2
const result = list.map(double)
console.log(result) // [2,4,6,8]
將陣列元素傳入函式做過濾
第一個參數是目前被處理中的元素,第二個參數是被處理中的元素之索引,第三個參數是呼叫 filter() 的陣列
const list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const result = list.filter(function (val, idx, arr) {
return val % 2 == 1
})
console.log(result) // [1,3,5,7,9]
陣列數字加總
第一個參數是目前陣列元素累加的總數,第二個參數是目前被處理的元素
const list = [1,2,3,4,5]
const result = list.reduce(function(sum, value) {
return sum += value
}, 0) // 起始值, 無起始值的話第一輪的 sum 預設為陣列中的第一個元素 value 為第二個元素
console.log(result) // 55
const list = [1,9,10,3,5]
const result = list.reduce(function(value1, value2) {
if (value1 > value2) return value1
return value2
})
console.log(result) // 10
const list = [1, 9, 10, 3, 5];
const result = list.sort(function (value1, value2) {
if (value1 > value2) {
return 1;
}
return -1;
});
console.log(result);
const list = [1,2,3,4,5,6,7,8,9,10]
const result = list.reduce(function(acc, cv) {
if (cv % 2 !== 0 ) {
return acc+ cv**2
}
return acc
})
console.log(result)
老師解法:
const list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const odd = (n) => {return n % 2 == 1}
const square = (n) => n * n
const sum = (acc, cv) => acc + cv
const result = list
.filter(odd) // 奇數
.map(square) // 平方
.reduce(sum) // 和
console.log(result)